#include<bits/stdc++.h>
using namespace std;

int n,m,B;
struct PPP{
	int x,y;
}pts[500010];
bool cmp(PPP x,PPP y){
	return x.y<y.y;
}

vector<int> exc[500010*4],sub[500010*4];

const int _=500010;
bitset<_> vld;
int idx;
int L[_],R[_],D[_],U[_];

void Insert(int now,int l,int r,int lb,int rb,int del){
	sub[now].emplace_back(del);
	if(lb<=l&&r<=rb){
		exc[now].emplace_back(del);
		return;
	}
	int mid=(l+r)>>1;
	if(lb<=mid) Insert(now<<1,l,mid,lb,rb,del);
	if(mid+1<=rb) Insert(now<<1|1,mid+1,r,lb,rb,del);
}
int Query(int now,int l,int r,int lb,int rb){
	int ret=0;
	while(exc[now].size()&&vld[exc[now][exc[now].size()-1]]==0){
		exc[now].pop_back();
	}
	if(exc[now].size()){
		ret=exc[now][exc[now].size()-1];
	}
	if(lb<=l&&r<=rb){
		while(sub[now].size()&&vld[sub[now][sub[now].size()-1]]==0){
			sub[now].pop_back();
		}
		if(sub[now].size()&&U[sub[now][sub[now].size()-1]]>U[ret]){
			ret=sub[now][sub[now].size()-1];
		}
		return ret;
	}
	int mid=(l+r)>>1;
	if(lb<=mid){
		int tmp=Query(now<<1,l,mid,lb,rb);
		if(U[tmp]>U[ret]) ret=tmp;
	}
	if(mid+1<=rb){
		int tmp=Query(now<<1|1,mid+1,r,lb,rb);
		if(U[tmp]>U[ret]) ret=tmp;
	}
	return ret;
}


int main(){
	// vector<int> tmp;
	// tmp.emplace_back(1);
	// cout<<tmp.size()<<endl;
	// tmp.pop_back();
	// cout<<tmp.size();
	freopen("grid.in","r",stdin);
	freopen("grid.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n>>m>>B;
	for(int i=1;i<=B;++i){
		cin>>pts[i].x>>pts[i].y;
	}
	sort(pts+1,pts+1+B,cmp);
	U[0]=-10;
	for(int i=1;i<=B;++i){
		int ll,rr,uu,dd;
		dd=uu=pts[i].y;
		ll=rr=pts[i].x;
		int nxt=0;
		nxt=Query(1,1,n,ll,rr);
		if(U[nxt]>=uu) continue;
		if(U[nxt]<dd-2){
			nxt=Query(1,1,n,max(1,ll-1),min(n,rr+1));
			if(U[nxt]<dd-1){
				nxt=Query(1,1,n,max(1,ll-2),min(n,rr+2));
				if(U[nxt]<dd){
					nxt=0;
				}
			}
		}
		while(nxt){
			vld[nxt]=0;
			ll=min(ll,L[nxt]);
			rr=max(rr,R[nxt]);
			dd=min(dd,D[nxt]);
			nxt=Query(1,1,n,ll,rr);
			if(U[nxt]<dd-2){
				nxt=Query(1,1,n,max(1,ll-1),min(n,rr+1));
				if(U[nxt]<dd-1){
					nxt=Query(1,1,n,max(1,ll-2),min(n,rr+2));
					if(U[nxt]<dd){
						nxt=0;
					}
				}
			}
		}
		++idx;
		L[idx]=ll;
		R[idx]=rr;
		U[idx]=uu;
		D[idx]=dd;
		vld[idx]=1;
		Insert(1,1,n,ll,rr,idx);
	}
	long long ans=0;
	for(int i=1;i<=idx;++i){
		if(vld[i]){
			ans+=1ll*(R[i]-L[i]+1)*(U[i]-D[i]+1);
		}
	}
	cout<<ans;
	return 0;
}